HIMEM.SYS
윈도우나 도스용 프로그램에서 1MB 이상의 연속 확장 메모리로 접근할 수 있도록 해주는 메모리 관리자로 흔히 "Gate A20 핸들러"라고 한다. 이 파일이 없으면 윈도우로 부팅할 수 없다. 따라서, 윈도우 98 이상 버전에서는 Config.sys 파일에 Device 명령어로 HIMEM.SYS가 지정되지 않으면 윈도우로 부팅할 때 C:\Windows 디렉토리(폴더)에서 HIMEM.SYS 파일을 찾아 메모리에 로드한 다음 윈도우로 부팅한다.
이 장치 제어기는 연속 확장 메모리의 사용을 관리하기 위하여 사용되는 것으로 연속 확장 메모리 또는 고위 메모리 영역(HMA)을 사용하는 2개의 응용 프로그램이나 장치 제어기가 같은 메모리를 동시에 사용할 수 없도록 한다.
HIMEM.SYS는 장치 제어기이기 때문에 Config.sys 파일에서 Device 명령어를 사용하여 메모리에 탑재해야 하고, HIMEM.SYS 장치 제어기를 설치하기 위한 Device 명령은 연속 확장 메모리를 사용하는 다른 어떠한 응용 프로그램이나 장치 제어기보다 먼저 지정되어야 한다.
예를 들어 HIMEM.SYS는 Emm386 장치 제어기보다 앞에 지정하여야 한다. 따라서, HIMEM.SYS 장치 제어기는 Device 명령어만 사용하여 메모리에 탑재할 수 있고, Devicehigh는 사용할 수 없다.
대부분의 경우 HIMEM.SYS를 메모리에 탑재할 때 옵션을 사용하지 않는다. 이것은 HIMEM.SYS가 대부분의 컴퓨터에 맞도록 설계되어 있기 때문에 기본값으로 설정되어도 정상적으로 작동된다.
■ 명령어 위치
윈도우 시동 디스크의 루트 디렉토리(폴더)에 들어 있는 제어기 파일
윈도우가 설치되어 있는 하드디스크(C:\Windows)에 들어 있는 제어기 파일
■ 사용법
DEVICE = [drive:][path]HIMEM.SYS [/TESTMEM:ON|OFF] [/HMAMIN=m] [/INT15=xxxx]
[/NUMHANDLES=n] [/MACHINE:xxxx] [/VERBOSE] [/A20CONTROL:ON|OFF]
[/EISA] [/CPUCLOCK:ON|OFF] [/SHADOWRAM:ON|OFF]
■ 옵션 및 매개변수

[drive:][path] | HIMEM.SYS 파일이 있는 경로를 지정한다. 윈도우에서는 HIMEM.SYS 파일이 C:\Windows 디렉토리(폴더)에 위치한다.
/testmem:on|off | 이 옵션은 HIMEM.SYS가 연속 확장 메모리를 점검할 것인지를 지정하기 위하여 사용하는 옵션이다. 연속 확장 메모리의 상태를 점검하도록 하면 컴퓨터를 부팅할 때 다소의 시간이 더 소요된다. 특히, 많은 량의 연속 확장 메모리가 설치되어 있는 경우에는 십여초 가량 소요되기도 한다. 이 경우 HIMEM.SYS 장치 제어기를 설치할 때 /testmem:off 옵션을 사용하여 연속 확장 메모리의 상태를 점검하지 않도록 할 수 있다. 이 경우, HIMEM.SYS는 연속 확장 메모리의 상태를 점검하지 않기 때문에 그만큼 컴퓨터의 부팅 시간은 단축되지만 연속 확장 메모리에 있는 데이터의 안정성은 보장할 수 없게 된다. 디폴트 값은 /testmem:on으로 연속 확장 메모리의 안전성을 점검하는 것이다.
/hmamin=m | HIMEM.SYS가 고위 메모리 영역(HMA)의 사용을 허용하기 전에 응용 프로그램에서 사용할 수 있도록 고위 메모리 영역을 비축하기 위하여 사용하는데, KB 단위로 지정한다. m에 지정할 수 있는 값의 범위는 0∼63KB인데, 일반적으로 고위 메모리 영역을 사용하는 대부분의 응용프로그램이 요구하는 메모리의 합계로 설정한다.
/int15=xxxx | INT15 인터페이스를 위한 연속 확장 메모리를 KB단위로 할당한다. 어떤 오래된 응용프로그램들은 15h 인터럽트 인터페이스를 사용한 연속 확장 메모리 구조와 HIMEM에 의한 XMS 구조와 차이가 있을 수 있다. 이러한 응용프로그램을 사용하려면 충분한 메모리를 이용할 수 있도록 xxxx로 지정한 값에 64를 더한다. 유효값의 범위는 64∼65535이며, 시스템이 가지고 있는 메모리 공간보다 더 큰 값을 지정할 수는 없다. 만일 64보다 작은 값을 지정하면 0으로 인식 되며, 기본값은 0이다.
/numhandles=n | 동시에 사용될 수 있는 연속 확장 메모리 블럭(EMB) 핸들의 최대 수를 지정한다. 지정할 수 있는 핸들의 수는 1∼128 사이의 값이고, 디폴트 값은 32개이다. 핸들 하나에 6바이트의 상주 메모리를 필요로 하는데, 이 옵션으로 지정한 핸들은 윈도우로 부팅될 때는 영향을 미치지 못한다.
/machine:xxxx | 사용하는 컴퓨터의 종류를 지정한다. 일반적으로 HIMEM은 거의 모든 컴퓨터에 자동으로 맞도록 설계되어 있지만 일부 컴퓨터의 경우에는 HIMEM에 컴퓨터 종류를 지정해야 한다. 즉, 기본값으로 지정된 HIMEM.SYS 장치 제어기가 정상적으로 작동하지 못할 경우에 사용하는 옵션이다. Acer 1100, Wyse, IBM 7552와 같은 컴퓨터는 이 옵션을 필요로 하는 컴퓨터이다. xxxx에 지정할 수 있는 값과 컴퓨터의 종류에 대한 자세한 것은 다음에 설명할 "참고 사항"을 참조하기 바란다.
/verbose | HIMEM이 메모리에 탑재될 때 HIMEM의 탑재 상태나 오류 메시지를 보여주도록 설정하기 위해 사용하는 옵션으로, 이 옵션을 지정하지 않는 경우에는 디폴트로 상태나 오류에 관한 메시지를 보여주지 않는다. 이 옵션은 /V로 줄여서 사용할 수 있다. 만약, 이 옵션을 지정하지 않은 상태에서 HIMEM의 탑재 상태나 오류 메시지를 디스플레이하려면 HIMEM이 메모리에 탑재될 때 키보드 상에서 <Alt>를 누른 상태를 유지한다.
/a20control:on|off | 이 옵션을 지정하면 HIMEM.SYS가 메모리에 탑재될 때 A20이 지정되어 있더라도 A20 라인을 제어한다. A20 핸들러는 운영 체제가 고위 메모리 영역(HMA)을 제어할 수 있도록 해준다. 이 옵션을 OFF로 지정하면 HIMEM.SYS가 읽혀 들여 질 때 A20이 해제된 경우에만 HIMEM.SYS는 A20 라인을 제어한다. 디폴트 값은 ON이다. 이 옵션에서 최소 요구량을 지정하지 않으면 디폴트로 0KB가 지정된다. 만약, 이 옵션을 생략하면 HIMEM은 고위 메모리 영역을 요구하는 첫 번째 응용 프로그램에 할당한다. 이 옵션은 윈도우에서는 아무 영향을 미치지 못한다.
/eisa | HIMEM.SYS가 지정할 수 있는 이용 가능한 연속 확장 메모리를 지정한다. 이 옵션은 EISA(Extended Industry Standard Architecture) 방식의 컴퓨터에서 16MB 이상의 메모리를 가지고 있는 경우에만 지정한다. 다른 종류의 컴퓨터에서는 자동으로 이용 가능한 연속 확장 메모리를 지정하게 되어있다.
/cpuclock:on|off | HIMEM.SYS가 컴퓨터의 클럭 속도에 영향을 줄 것인지를 지정한다. HIMEM.SYS를 설치했을 때 변화가 있으면 ON으로 지정한다. 디폴트 값은 OFF이다.
/shadowram:on|off | 이 옵션은 Shadow RAM을 해제하거나 RAM에서 실행되는 ROM 명령을 ROM에서 실행되도록 지정하기 위하여 사용한다. 어떤 컴퓨터는 ROM에 있는 명령을 읽고 쓰는 속도가 빠른 RAM의 연속 확장 메모리로 복사해서 사용하는 방법인 "shadowing" 이라는 기법을 사용한다. 이 옵션을 on으로 설정하면 ROM의 데이터를 연속 확장 메모리로 복사하여 사용하고, off로 설정하면 ROM에서 직접 데이터를 읽어서 사용한다. 디폴트 값은 시스템에 설치되어 있는 메모리의 양에 따라 달라지는데, 2MB 이상인 경우에는 on이 디폴트이고, 2MB 이하인 경우에는 off가 디폴트로 설정된다.

■ 참고 사항
☞ 연속 확장 메모리의 안정성 점검
메모리 안정성 점검은 컴퓨터를 시동할 때마다 연속 확장 메모리의 상태를 점검하는 것으로, HIMEM.SYS가 연속 확장 메모리의 각 주소 영역에 서로 다른 데이터를 기록하고 읽고 하는 작업을 반복함으로써 안정성을 점검하는 것이다.
만약, 연속 확장 메모리에 원래 기록한 데이터와 다른 데이터를 읽거나 읽을 수 없게 된다면 그 메모리 영역은 신뢰할 수 없게 된다.
신뢰할 수 없는 메모리 영역은 시스템의 불안정과 데이터의 손실을 야기할 수 있다. 만약, HIMEM.SYS가 신뢰할 수 없는 메모리 영역을 발견하면 다음과 같은 메시지를 보여주고 HIMEM.SYS를 메모리에 탑재하지 않는다.
ERROR: HIMEM.SYS has detected unreliable extended memory at address xxxxxxxxh.
만약, 이러한 메시지가 나타나면 연속 확장 메모리로 설치되어 있는 시스템 메모리를 교체하거나 컴퓨터 구입처에서 시스템 메모리를 교체해달라고 요구해야 한다.
비록, /testmem:off 옵션을 사용하여 연속 확장 메모리를 사용할 수는 있지만 시스템의 안정성을 확보할 수 없게 된다.
☞ 상용 메모리 할당
시스템 메모리의 640∼1024KB 중에서 최초의 64KB인 고위 메모리 영역은 한번에 한 프로그램만 사용할 수 있다.
따라서, /HMAMIN=m 옵션을 생략하거나 m 값으로 0을 지정한 경우 HIMEM은 맨 먼저 고위 메모리 영역을 요구하는 응용 프로그램에 고위 메모리 영역을 할당한다. 따라서, 시스템이 고위 메모리 영역을 좀더 효율적으로 사용하기 위하여 HMA의 대부분을 사용하는 응용 프로그램이 필요로 하는 메모리양에 맞도록 응용 프로그램이 사용할 고위 메모리의 양을 적절히 지정하여야 한다.
☞ DEVICEHIGH 명령어 사용하기
HIMEM.SYS 장치 제어기는 DOS 운영 체제의 일부를 고위 메모리 영역으로 이동시키고, 연속 확장 메모리를 사용하기 위하여 반드시 필요한 장치 제어기이기 때문에 Devicehigh 명령어를 사용하여 상위 메모리 영역으로 탑재할 수 없다.
즉, 상위 메모리 영역으로 장치 제어기를 탑재하기 위해서는 Emm386.exe 장치 제어기가 설치되어야 하는데, Emm386.exe를 설치하기 위한 선행 조건으로 HIMEM.SYS 장치 제어기가 필요하기 때문이다.
☞ DOS 운영 체제를 고위 메모리 영역으로 탑재하기
DOS 운영 체제의 일부를 고위 메모리 영역으로 탑재하려면 HIMEM이나 다른 연속 확장 메모리 관리자를 Device 명령어를 사용하여 메모리에 탑재하여야 한다.
만약, HIMEM이나 기타 연속 확장 메모리 관리자를 탑재하지 않는 경우에는 운영 체제의 일부를 고위 메모리 영역으로 탑재할 수 없다.
참고로, DOS 운영 체제를 고위 메모리 영역으로 탑재하려면 Config.sys에서 DOS=HIGH 명령어를 사용한다.
☞ 컴퓨터의 종류 지정하기
HIMEM.SYS는 대부분의 컴퓨터에서 정상적으로 작동하도록 설계되어 있는데, 일부 컴퓨터에서는 정상적으로 작동하지 않는다. 만약, HIMEM이 정상적으로 작동하지 않는다면 /MACHINE:xxxx 옵션을 사용하여 컴퓨터의 종류를 지정하여야 한다.
다음은 xxxx에 지정할 수 있는 컴퓨터의 종류를 나타내는 숫자와 컴퓨터 코드, 그리고 컴퓨터의 종류에 관한 설명이다.

번호 | 코드 | 컴퓨터의 종류 | 번호 | 코드 | 컴퓨터의 종류
1 | at | IBM AT 100% 호환기종 | 11 | at1 | IBM PC/AT
2 | ps2 | IBM PS/2 | 12 | at2 | IBM PC/AT
3 | ptlcascade | Phoenix Cascade BIOS | 12 | css | CSS Labs
4 | hpvectra | HP Vectra (A & A+) | 13 | at3 | IBM PC/AT
5 | att6300plus | AT&T 6300 Plus | 13 | philips | Philips
6 | acer1100 | Acer 1100 | 14 | fasthp | HP Vectra
7 | toshiba | Toshiba 1600 & 1200XE | 15 | ibm7552 | IBM 7552 산업용
8 | wyse | Wyse 12.5 Mhz 286 | 16 | bullmicral | Bull Micral 60
9 | tulip | Tulip SX | 17 | dell | Dell XBIOS
10 | zenith | Zenith ZBIOS |  |  |

■ 사용 예
HIMEM.SYS 장치 제어기를 디폴트 값으로 사용하려면 다음과 같은 Device 명령어를 Config.sys 파일에 포함시킨다.
device=himem.sys
위의 예에서 HIMEM.SYS 파일을 위한 경로가 지정되지 않았기 때문에 시동 드라이브의 루트 디렉토리에서 HIMEM.SYS 파일을 찾고, 아무런 옵션 없이 사용했기 때문에 디폴트 값으로 작동한다.
만약, HIMEM.SYS가 연속 확장 메모리를 관리할 수 있는 핸들의 수를 128개로 지정하려면 다음과 같은 Device 명령어를 Config.sys 파일에 포함시킨다.
device=c:\windows\himem.sys /numhandles=128
위의 예에서와 같이 Device 명령어를 사용한 경우에는 HIMEM.SYS는 연속 확장 메모리의 안정성을 점검한다.
만약, 컴퓨터에 설치되어 있는 연속 확장 메모리의 안정성 점검을 하지 않도록 지정하여 컴퓨터의 부팅 시간을 단축하려면 다음과 같은 명령어 라인을 Config.sys 파일에 추가한다.
device=c:\windows\himem.sys /numhandles=128 /testmem:off